/******************************************************************************\
**  版    权 :  深圳开鸿数字产业发展有限公司（2021）
**  文件名称 :  oled.h
**  功能描述 :  oled显示驱动：SSD1306 OLED 驱动IC驱动代码，驱动方式:8080并口/4线串口
**  作    者 :  王滨泉
**  日    期 :  2021.10.23
**  版    本 :  V0.0.1
**  变更记录 :  V0.0.1/2021.10.23
                1 首次创建                 
\******************************************************************************/
#ifndef __OLED_H
#define __OLED_H		
/******************************************************************************\
                             Includes
\******************************************************************************/	  	 
#include <stdint.h>
#include <stdlib.h> 

/******************************************************************************\
                          Macro definitions
\******************************************************************************/


/******************************************************************************\
                         Typedef definitions
\******************************************************************************/

//OLED模式设置
//0: 4线串行模式  （模块的BS1，BS2均接GND）
//1: 并行8080模式 （模块的BS1，BS2均接VCC）
#define OLED_MODE 	0 
		    						  
//---------------------------OLED端口定义--------------------------  					   
#define OLED_CS  PDout(6)
#define OLED_RST PGout(15) 	
#define OLED_RS  PDout(3)
#define OLED_WR  PGout(14)		  
#define OLED_RD  PGout(13)	   
//PC0~7,作为数据线
#define DATAOUT(x) GPIOC->ODR=(GPIOC->ODR&0xff00)|(x&0x00FF); //输出
  
//使用4线串行接口时使用 
#define OLED_SCLK PCout(0)
#define OLED_SDIN PCout(1)
		     
#define OLED_CMD  0	//写命令
#define OLED_DATA 1	//写数据
//OLED控制用函数
/*
* 函数名称 : OLED_WR_Byte
* 功能描述 : 向SSD1306写入一个字节。	
* 参    数 : dat - 要写入的数据/命令
			 cmd - 数据/命令标志 0,表示命令;1,表示数据;
* 返回值   : 空
* 示    例 : OLED_WR_Byte(dat, cmd);
*/
/******************************************************************************/  
extern void OLED_WR_Byte(uint8_t dat,uint8_t cmd);	  
/******************************************************************************/   
/*
* 函数名称 : OLED_Display_On
* 功能描述 : 开启OLED显示  	
* 参    数 : 空
* 返回值   : 空
* 示    例 : OLED_Display_On();
*/
/******************************************************************************/    
extern void OLED_Display_On(void);
/******************************************************************************/  
/*
* 函数名称 : OLED_Display_Off
* 功能描述 : 关闭OLED显示   	
* 参    数 : 空
* 返回值   : 空
* 示    例 : OLED_Display_Off();
*/
/******************************************************************************/   
extern void OLED_Display_Off(void);
/******************************************************************************/  
/*
* 函数名称 : OLED_Refresh_Gram
* 功能描述 : 更新显存到LCD	
* 参    数 : 空
* 返回值   : 空
* 示    例 : OLED_Refresh_Gram();
*/
/******************************************************************************/ 
extern void OLED_Refresh_Gram(void);  
/******************************************************************************/ 		    
/*
* 函数名称 : OLED_Clear
* 功能描述 : 清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!	    	
* 参    数 : 空
* 返回值   : 空
* 示    例 : OLED_Clear();
*/
/******************************************************************************/  
extern void OLED_Clear(void);
/******************************************************************************/  
/*
* 函数名称 : OLED_DrawPoint
* 功能描述 : 画点 	    	
* 参    数 : x - 横轴坐标，取值范围：0~127，
			 y - 竖轴坐标，取值范围：0~63
			 t - 1：填充，0：清空	
* 返回值   : 空
* 示    例 : OLED_DrawPoint(x,y,t);
*/
/******************************************************************************/  	
extern void OLED_DrawPoint(uint8_t x,uint8_t y,uint8_t t);
/******************************************************************************/  
/*
* 函数名称 : OLED_Fill
* 功能描述 : 填充区域的对角坐标, 确保x1<=x2;y1<=y2 0<=x1<=127 0<=y1<=63	    	
* 参    数 : x1,x2 - 横轴坐标，取值范围：0~127
			 y1,y2 - 竖轴坐标，取值范围：0~63
			 dot - 1：填充，0：清空	
* 返回值   : 空
* 示    例 : OLED_Fill(x1,y1,x2,y2,dot);
*/
/******************************************************************************/  
extern void OLED_Fill(uint8_t x1,uint8_t y1,uint8_t x2,uint8_t y2,uint8_t dot);
/******************************************************************************/  
/*
* 函数名称 : OLED_ShowChar
* 功能描述 : 在指定位置显示一个字符,包括部分字符	    	
* 参    数 : x - 横轴坐标，取值范围：0~127，
			 y - 竖轴坐标，取值范围：0~63
			 chr - 字符
			 size - 选择字体 12/16/24
			 mode - 0,反白显示;1,正常显示
* 返回值   : 空
* 示    例 : OLED_ShowChar(x,y,chr,size,mode);
*/
/******************************************************************************/  
extern void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr,uint8_t size,uint8_t mode);
/******************************************************************************/  
/*
* 函数名称 : OLED_ShowNum
* 功能描述 : 显示2个数字	    	
* 参    数 : x - 横轴坐标，取值范围：0~127，
			 y - 竖轴坐标，取值范围：0~63
			 num - 数值(0~4294967295)
			 len - 数字的位数
			 size - 选择字体 12/16/24 
* 返回值   : 空
* 示    例 : OLED_ShowNum(x,y,chr,size,mode);
*/
/******************************************************************************/  	
extern void OLED_ShowNum(uint8_t x,uint8_t y,uint32_t num,uint8_t len,uint8_t size);
/******************************************************************************/  	
/*
* 函数名称 : OLED_ShowString
* 功能描述 : 显示字符串	    	
* 参    数 : x - 横轴坐标，取值范围：0~127，
			 y - 竖轴坐标，取值范围：0~63
			 p - 字符串起始地址 
			 size - 选择字体 12/16/24 
* 返回值   : 空
* 示    例 : OLED_ShowString(x,y,p,size);
*/
/******************************************************************************/  
extern void OLED_ShowString(uint8_t x,uint8_t y,const uint8_t *p,uint8_t size);	 
/******************************************************************************/  
/*
* 函数名称 : OLED_Show_Qr_Code
* 功能描述 : 显示二维码    	
* 参    数 : 空
* 返回值   : 空
* 示    例 : OLED_Show_Qr_Code();
*/
/******************************************************************************/  
extern void OLED_QRcode_Display(char *str,uint8_t offset,uint8_t colour);
/******************************************************************************/  
/*
* 函数名称 : OLED_Init
* 功能描述 : 初始化SSD1306  	
* 参    数 : 空 
* 返回值   : 空
* 示    例 : OLED_Init();
*/
/******************************************************************************/  
extern void OLED_Init(void);
/******************************************************************************/  

#endif  
/******************************* End of File (H) ******************************/
	 



